﻿// 
//    Copyright 2010 The JaernCloud Project
// 
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
// 
//        http://www.apache.org/licenses/LICENSE-2.0
// 
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.
// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using JaernCloud.Web.MVC2;
using JaernCloud.Web.MVC2.Controllers;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using JaernCloud.Web.MVC2.Test.Scopes;
using JaernCloud.Language.Runtime.View;

namespace JaernCloud.Web.MVC2.Test.Controllers {
    
    [TestClass]
    public class HomeControllerTest {

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext {
            get;
            set;
        }        

        [TestMethod]
        public void Index() {
            // Arrange
            HomeController controller = new HomeController();
            controller.ServerContext = new JaernCloudServerContextMock(TestContext);
            controller.Scopes = new NodeObjectScopeProviderMock(controller);

            // Act
            ViewResult result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);

            // Verify model
            ViewNodeObject viewNodeObject = (ViewNodeObject)result.ViewData["JaernCloud.View"];
            dynamic view = viewNodeObject;
            int count = view.counter.count;
            Assert.AreEqual(count, 0);
            view.counter.count++;
            int newCount = view.counter.count;
            Assert.AreEqual(newCount, 1);
        }

        [TestMethod]
        public void About() {
            // Arrange
            HomeController controller = new HomeController();

            // Act
            ViewResult result = controller.About() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
    }
}
